name: PHP

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

concurrency:
  group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - name: Validate composer.json and composer.lock
      run: composer validate --strict

    - name: Cache Composer packages
      id: composer-cache
      uses: actions/cache@v4
      with:
        path: vendor
        key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-php-

    - name: Install dependencies
      run: composer install --prefer-dist --no-progress

    # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit"
    # Docs: https://getcomposer.org/doc/articles/scripts.md

    # - name: Run test suite
    #   run: composer run-script test

  phpmd:
    name: PHPMD
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup PHP environment
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.2
          coverage: none
          tools: phpmd

      - name: Install dependencies
        run: composer install --prefer-dist --no-progress

      - name: Run PHPMD
        run: vendor/bin/phpmd . github phpmd.ruleset.xml

  php-cs-fixer:
    permissions:
      contents: read  # for actions/checkout to fetch code
    name: PHP CS Fixer
    runs-on: ubuntu-latest
    steps:
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: 8.2
          extensions: mbstring, intl, gd, xml, dom, json, fileinfo, curl, zip, iconv
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - uses: actions/checkout@v4

      - name: Get Composer Cache Directory
        id: composer-cache
        run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

      - name: Cache Composer Directory
        uses: actions/cache@v4
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: ${{ runner.os }}-composer-

      - name: Validate composer config
        run: composer validate --strict

      - name: Composer Install
        run: composer install --ansi --prefer-dist --no-interaction --no-progress

      - name: Run PHPCSFixer
        run: ./vendor/bin/php-cs-fixer fix --dry-run --diff --allow-risky=yes

      - name: Run ergebnis/composer-normalize
        run: composer normalize --dry-run --no-check-lock

  # phpstan:
  #   permissions:
  #     contents: read  # for actions/checkout to fetch code
  #   name: PHP Static Analysis
  #   runs-on: ubuntu-latest
  #   strategy:
  #     matrix:
  #       php: ['8.2']
  #     fail-fast: false
  #   steps:
  #     - name: Setup PHP
  #       uses: shivammathur/setup-php@v2
  #       with:
  #         php-version: '8.2'  # will be overriden by platform.php in composer.json see https://phpstan.org/config-reference#phpversion
  #         extensions: mbstring, intl, gd, xml, dom, json, fileinfo, curl, zip, iconv, simplexml
  #         coverage: none  # disable coverage to disable xdebug in the action.
  #       env:
  #         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  #     - uses: actions/checkout@v4

  #     - name: Get Composer Cache Directory
  #       id: composer-cache
  #       run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

  #     - name: Cache Composer Directory
  #       uses: actions/cache@v4
  #       with:
  #         path: ${{ steps.composer-cache.outputs.dir }}
  #         key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
  #         restore-keys: ${{ runner.os }}-composer-

  #     - name: Composer Install
  #       run: |
  #         composer install --ansi --prefer-dist --no-interaction --no-progress
  #         rm composer.lock
  #         composer config platform.php ${{ matrix.php }}

  #     - name: Run phpstan
  #       run: ./vendor/bin/phpstan analyse -c phpstan.neon.dist

  phpinsights:
      runs-on: ubuntu-latest
      name: PHP Insights checks
      steps:
          - uses: actions/checkout@v4
          - uses: shivammathur/setup-php@v2
            with:
                php-version: 8.2
          - run: composer install --prefer-dist --no-progress --no-suggest
          - run: vendor/bin/phpinsights -n --ansi --format=github-action